iT邦幫忙

DAY 11
4

freedos bochs 16位元 組合語言…等系列 第 11

組合語言熱身:debug之A,CPU Instructions CPU指令介紹

  • 分享至 

  • xImage
  •  

在學組語的過程中,筆者常常會自問自答,如暫存器的大小,決定cpu的價格,
做一個小實驗:
C:\>debug
-a 100
08FA:0100 mov eax,20
08FA:0106
-a 106
08FA:0100 mov ax,20
08FA:0109
看一下記憶體的佔用,
-d cs:100
08FA:0100 66 B8 20 00 00 00 B8 20-00
eax的20,變成20 00 00 00
ax的20,20-00
反組譯一下,
-u cs:100
08FA:0100 66B820000000 MOV EAX,00000020
08FA:0106 B82000 MOV AX,0020
66B8是MOV EAX,B8是MOV AX。

所以AX是16位元(2byte),EAX是32位元(4byte)。
對硬體而言,把暫存器空間加倍,不困難,但程式從16位元跳32位元,經過好久,32跳64位元同樣很久。
網路上分享一本Gnu 組語(gas)的小書(326頁PDF),感謝作者Jonathan Bartlett
無私的分享。

才知道組語的風格有兩種,一種是AT&T,一種是INTEL. 兩種風格不同。之後會提到 。

組語大概是世界上,同種語言,編譯器幾乎最多的電腦語言。目前己知有TASM, MASM, YASM, NASM, FASM, WASM...等,比泛用的C語言,不遑多讓,但普及度差多了,以職缺工作機會及一陣子(每年)的電腦語言使用排名來說,組合語言的程式員比C語言少得多了。

-----------------------------------------
書上的附錄B是常用的x86指令(Appendix B. Common x86 Instructions)
分成4大類:
1。Data Transfer Instructions資料搬移指令
2。Integer Instructions整數指令
3。Logic Instructions邏輯指令
4。Flow Control Instructions流程控制指令
記憶體不會運算,所以是CPU提供這些指令的運算能力。
同理CPU不能存很久,只能暫存,所以要靠記憶體。
而CPU的定址能力,也是價格決定因素。

在同事(一起在吸煙區旁邊,不吸煙的兩個人常常在一塊喝咖啡)不知道在網路上那裏找到的微軟MASM 程式員指引。
是這樣分類。
Arithmetic 算術類
BCD Conversion轉換類
Bit Operations位元操作類
Compare比較類
Conditional Set條件設定類
Conditional Transfer 條件轉移類
Data Transfer資料轉移類
Flag旗標類
Input/Output 輸入輸出類
Loop迴圈類
Process Control行程控制類
Processor Control處理器控制類
Stack堆疊類
String字串類
Type Conversion 型別轉換類
Unconditional Transfer非條件轉移類。

不管直譯式,組譯式程式語言,不管虛擬機還是跨平台,程式語言最後還是要編成機器碼,才能執行,
組語( mov eax,20)還不夠,要66B820000000, CPU才能執行。

只是這些組語的指令實在太多了,是不是CPU設計商(AMD/INTEL/ARM)也靠新增這些指令來賺錢,但是做為高階語言翻譯成組語的編譯器設計者,他們顯然對指令要很熟練,用對指令才行。

-----------------------------------------
也是在這本乎冊中,還有所謂的Coprocessor副處理器(協同處理器)
所謂的
8087,80287, and 80387這些副處理器,而在小木偶前輩的Ch 22 FPU (1) 簡介,
是所謂的浮點運算器是 floating-point processor unit,
從其字面上的意思可以了解。以浮點數計算為主。應該不只是賣點,而是市場求。
這個共同處理器Coprocessor又新增加了不少指令。
Arithmetic算術類
Compare比較類
Load載入類
Load Constant載入常數類
Processor Control處理器控制類
Store Data存數據類
Transcendental 超越類

---------------------------------------
其實作業系統只用到其中很小的一部分。那部分和BIOS和從真實模式切換到保護模式比較有關係。

重要的是,組語對於讓筆者了解程式語言是如何運作的,提供了不少線索,換個角度來看程式語言。


上一篇
FreeDos下組合語言之熱身:debug之九,型別db,dw,dd
下一篇
組合語言熱身:debug之B ,CMP JMP比較及跳
系列文
freedos bochs 16位元 組合語言…等17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
timloo
iT邦研究生 2 級 ‧ 2012-10-04 21:47:52

有網友分享資遣5次的經驗,這十多年來,類似的經驗不少。
覺得自己際遇還算不錯了。算是比較際遇後的心靈安慰法。

-------------------------------
每個人選擇和環境對抗的方式不同,
有些人EQ超高,樂觀以對。
有些人進修,充實自己。

筆者是反向進修的一類,因為流行的技術,實在變化快學不來,
故反向學一些就算iOS 16, android 14.1還是會用到的基礎,
在這過程中,發現持這類思想的人,就世界是平的地球村來看,這類人並不少,
所以freedos,dosbox讓一堆經典遊戲再現,且會改版,甚至跑上iphone, ipad上,andorid app 也有移植的版本。
感謝自由軟體附帶來的好處。讓不想進步的人,也有同好。
------------------------------
專屬軟體原來不只是要求市場最大,利益最大,也把可貴的變異性消除了,
百家爭鳴,讓非主流軟體也能存活,反而是國家軟競爭力的提升,
android讓大家有錢賺,從另一角度來看,真不容易。

0
ted99tw
iT邦高手 1 級 ‧ 2012-10-04 22:10:03

timloo提到:
百家爭鳴,讓非主流軟體也能存活,反而是國家軟競爭力的提升...

組語重要性能提昇到國家高度,這真滴不容易.....其實不管有沒有錢賺,不管是否有復古潮流,不管iOS是6版16版或256版,俺還是覺得咱能否....

<span style="font-size: 30px;"><span style="color: green;">
鐘鼎山林,人各有志,
選你所愛,愛你所選...
</span></span>

苟能如此,那怕“騎敗”客上青康藏後,要再上珠峰,有志者扛也扛上去....無言

0
timloo
iT邦研究生 2 級 ‧ 2012-10-05 21:04:31

朱邦復先生一輩子就只搞組合語言和中文,
他就是一個堅持而執著的人,可惜好像他的很多研究成果,也沒和自由軟體基金會合作配合,
讓人覺得好可惜。

有多珍寶,真有需要珍藏起來嗎?尤其是一些所謂過時的老東西,也許有啟發後人的地方,
好像都沒看見開源的計劃把這些前人的精華發揚出來。

我要留言

立即登入留言